perm filename METER[SS,SYS]2 blob
sn#408117 filedate 1979-01-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 TITLE METER - USER MODE METER READOUT
C00009 00003 A B C D W X Y Z P PDLEN MTRMAX PDLIST MTRBUF MTRAVG CONST TABSPC MTRCOD MTRJOB MTRNSC MTRBKG SPCTAB MTRDS2 MTRDS3 MTRDTN MTRDSK MTRDS1 SPCLN NSPEC SPCNAM CNTRS
C00011 00004 GO GOLOOP GOSKIP GOEND GOAUTO QLOOP INLOOP NOTDIG INLUP1 HUH RESUMA RESUMB MTRST CODCSH USRCSH SYSCSH ANYCSH MTRBAD
C00016 00005 PEEKIT LOOP0 LOOP LOOP1 PKDONE NOMLST
C00018 00006 HITPNT JOBMTR BADJN
C00020 00007 MTRPN0 MTRPNT PLOOP0 PLOOP NLOOP PLOOP2 PLOOP1 CRLF DONALL SPCL1 MS1LUP MS1DON SPCXCT SPCXT1 SPCXT2 SPCXT0 CPOPJ1
C00028 00008 DECIN DECIN1 OCTOUT OCTOU1 DECOUT FRACT STAR NTAB NTABLN MS1MSG MS1LEN BADLST
C00032 ENDMK
C⊗;
TITLE METER - USER MODE METER READOUT
COMMENT ⊗
The data structure is:
mtrlst: pointer to head of list of meter blocks
mtrptr: pointer to current meter block
a meter block looks like:
MTRLNK: link (1 word) to next meter block. zero for end of list.
left half is stored in MTRCNM.
MTRDAT: datum (1 word) for BLKO MTR, i.e., the thing to measure
MTRVAL: last val (2 words) last BLKI MTR for standard period
MTRTOT: cumulative val (2 words) sum of all previous BLKI MTRs for this block
MTRCNT: val count (1 word) number of previous values
MTRREC: recent past (2 words) total of some 64 recent samples
MTRTMP: more recent (2 words) accumulates 64 samples for MTRREC
MTRNUT: # of MTRONs (1 word) counted each time SETUS1 is done (total)
MTRNUR: # of MTRONs (1 word) counted each time SETUS1 is done (recent)
MTRNUP: # of MTRONs (1 word) counted each time SETUS1 is done (temp recent)
MTRNUL: # of MTRONs (1 word) counted each time SETUS1 is done (last)
The reason the list is linked is because someday a UUO will allow meter requests
to be added to the list. New meter blocks in free storage could be added.
⊗
MTRLNK←←0 ;SPECIAL,,LINK TO NEXT
MTRDAT←←1 ;BLKO TYPE
MTRVAL←←2 ;1 RECENT VALUE
MTRTOT←←4 ;CUMULATIVE
MTRCNT←←6 ;COUNT OF NUMBER OF VALUES IN CUMULATIVE TOTAL
MTRREC←←7 ;16 RECENT VALUES
MTRTMP←←11 ;TEMPORARY CELLS
MTRNUT←←13
MTRNUR←←14
MTRNUP←←15
MTRNUL←←16
MTRSIZ←←17 ;SIZE OF A METER BLOCK
;TYPES OF THINGS METERED BY MICROCODE STATE 1
MTRSWP←←1 ;TIME SPENT WAITING FOR CACHE SWEEP
MTRSHF←←2 ;TIME SPENT SHUFFLING / SHUFFLING SETUP
MTRWST←←3 ;wasted time
MTRCST←←4 ;"CSHSET" TIME
MTRMAP←←5 ;"APRMAP" TIME
MTRNXT←←6 ;SCHEDULES
MTRPWT←←7 ;TIME DURING PWAIT
MTRXWT←←10 ;TIME DURING XWAIT
MTRWSC←←11 ;TIME DURING WSCHED
MTRSPR←←12 ;SPARE
;METER UUO
;AC BITS 0-8 FUNCTION
;IFE FTMTRACT,<
; 0 RESTORE METER BACKGROUND MODE
; 1 READ METERS INTO USER CORE AT ADDRESS POINTED TO
; BY RH OF AC. FOUR DOUBLE WORDS ARE READ:
; 0-1: TIMEBASE, 2-3: PERF COUNTER
; 4-5: EBOX COUNTER, 6-7: MBOX COUNTER
; 2 METER SYSTEMWIDE CACHE HIT RATIO
; 3 METER USER MODE CACHE HIT RATIO (ALL USERS)
; 4 METER USER MODE CACHE HIT RATIO (ONE JOB ONLY)
; LOW 9 BITS OF AC ARE JOB NUMBER. THIS FUNCTION
; ALSO CLEARS COUNT OF SCHEDULES KEPT IN MTRLST-12
; 5 ENTER METER "CODE" MODE. METER CACHE HIT RATE BETWEEN
; ASSEMBLED IN MARKERS INSIDE THE SYSTEM. LOW 3 BITS ARE
; THE PI CHANNEL NUMBER TO METER. NOT ALL CHANNELS ARE
; IMPLEMENTED
; 6 RESET CUMULATIVE VALUES FOR ALL METER BLOCKS
;
;OPERATIONS FROM 2 UP TAKE THE METER OUT OF BACKGROUND MODE
;
;>;IFE FTMTRACT
;IFN FTMTRACT,<
; 0 RESTORE ACCOUNTING MODE METERING
; 1 READ METERS INTO USER CORE AT ADDRESS POINTED TO
; BY RH OF AC. FOUR DOUBLE WORDS ARE READ:
; 0-1: TIMEBASE, 2-3: PERF COUNTER
; 4-5: EBOX COUNTER, 6-7: MBOX COUNTER
; 2 METER SYSTEMWIDE CACHE HIT RATIO
; 3 METER USER MODE CACHE HIT RATIO (ALL USERS)
; 4 RESET CUMULATIVE VALUES FOR ALL METER BLOCKS
; 5 ENTER BACKGROUND MODE METERING
;>;IFN FTMTRACT
;A B C D W X Y Z P PDLEN MTRMAX PDLIST MTRBUF MTRAVG CONST TABSPC MTRCOD MTRJOB MTRNSC MTRBKG SPCTAB MTRDS2 MTRDS3 MTRDTN MTRDSK MTRDS1 SPCLN NSPEC SPCNAM CNTRS
A←1
B←2
C←3
D←4
W←5
X←6
Y←7
Z←10
P←17
PDLEN←←100
MTRMAX←←100
PDLIST: BLOCK PDLEN
MTRBUF: BLOCK MTRSIZ*MTRMAX+1+MTRDAT
MTRAVG: BLOCK 2
CONST: 0↔=100000
TABSPC:
MTRCOD: 0 ;METER IS IN "CODE" MODE MTRLST-14
MTRJOB: 0 ;JOB TO METER MTRLST-13
MTRNSC: 0 ;NUMBER OF SCHEDULES OF MTRJOB MTRLST-12
MTRBKG: 0 ;METER IN BACKGROUND MODE MTRLST-11
SPCTAB:
MTRDS2: 0 ;MAX D2INT TIME MTRLST-10
MTRDS3: 0 ;D2X CORRESPONDING MTRLST-7
MTRDTN: BLOCK 2 ;TEMP CELLS FOR D2INT=TIMEBASE MTRLST-6
MTRDSK: BLOCK 2 ;CUMULATIVE D2INT TIME MTRLST-4
MTRDS1: BLOCK 2 ;1 SAMPLE OF D2INT TIME MTRLST-2
SPCLN←←<.-SPCTAB>/2
NSPEC←←.-TABSPC
SPCNAM: [ASCIZ/ microseconds Max D2INT time. D2X = /]
[ASCIZ/Timebase/]
[ASCIZ/D2INT total/]
[ASCIZ/One D2INT sample/]
CNTRS: BLOCK 2*4
;GO GOLOOP GOSKIP GOEND GOAUTO QLOOP INLOOP NOTDIG INLUP1 HUH RESUMA RESUMB MTRST CODCSH USRCSH SYSCSH ANYCSH MTRBAD
GO: RESET
MOVE A,[RADIX50 0,FTMTRA]
MOVEI B,0
MOVEI C,A
.SYML C,
JRST 4,.
MOVEM C,FTMTRA#
MOVE A,[SIXBIT /METER/]
NAMEIN A,
OUTSTR [ASCIZ /Someone else is using the meter program. Proceed with caution!
/]
RESCAN ;RE-READ MONITOR COMMAND LINE
GOLOOP: INCHSL A
JRST QLOOP ;NOTHING TO READ
CAIE A,";" ;COMMAND COMES AFTER SEMICOLON
JRST GOLOOP
GOSKIP: INCHSL A
JRST QLOOP
CAIE A," " ;IGNORE SPACES AND TABS AFTER SEMICOLON
CAIN A,11
JRST GOSKIP
MOVE B,A ;THIS IS CMD CHAR, BUT MIGHT ALSO BE ACTIVATOR
GOEND: ANDI B,177
CAIE B,12 ;SKIP TO ACTIVATOR
CAIN B,175
JRST GOAUTO
INCHSL B ;SKIP STUFF AFTER COMMAND CHAR UP TO ACTIVATOR
JRST GOAUTO
JRST GOEND
QLOOP: OUTSTR [ASCIZ /TYPE ONE CHARACTER OPTION:
? TYPE THIS LIST
X EXIT
M BACKGROUND METER PRINTOUT
0-9 BACKGROUND METER PRINTOUT FOR GIVEN PI CHANNEL (8=UUO, 9=USER)
F (FAST) BACKGROUND METER PRINTOUT FOR PI CHANNELS, UUO LEVEL, AND USER MODE
R RESET BACKGROUND COUNTERS
S START SYSTEM-WIDE CACHE HIT RATE METERING
H PRINT CACHE HIT RATE RESULTS
U START USER-MODE CACHE HIT RATE METERING
/]
SKIPE FTMTRA
OUTSTR [ASCIZ /B: ENTER BACKGROUND MODE (CAREFUL!)
A: RESTORE ACCOUNTING MODE
/]
SKIPN FTMTRA
OUTSTR [ASCIZ /B: RESUME BACKGROUND METERING
Cn: ENTER METER CODE MODE FOR PI CHANNEL N (MEASURE APPROXIMATE CACHE HIT RATIO)
Jn: METER CACHE HIT AND SCHEDULES FOR SINGLE JOB n (DECIMAL)
/]
INLOOP: OUTSTR [ASCIZ /
*/]
INCHRW A
GOAUTO: MOVE P,[-PDLEN,,PDLIST-1]
SETZM MQUICK# ;ASSUME TYPING OUT EVERYTHING
SETZM MPIMIN# ;MIN INDEX TO TYPEOUT
MOVEI B,-1
MOVEM B,MPIMAX# ;MAX INDEX TO TYPEOUT
PUSH P,A
PUSHJ P,PEEKIT ;GET CURRENT METER VALUES
POP P,A
CAIL A,"a"
CAILE A,"z"
CAIA
SUBI A,40
CAIN A,"?"
JRST QLOOP
CAIN A,"X"
EXIT
CAIN A,"M"
JRST MTRPNT
CAIL A,"0"
CAILE A,"9"
JRST NOTDIG
SUBI A,"0"
HRRZM A,MPIMIN ;NUMBER OF PI CHANNEL TO REPORT
HRRZM A,MPIMAX
SETOM MQUICK
JRST MTRPNT
NOTDIG: CAIN A,"F"
JRST MTRPN0 ;SET FAST TYPEOUT FLAG AND DO M CMD
CAIN A,"B"
JRST RESUMB
CAIN A,"R"
JRST MTRST
CAIN A,"S"
JRST SYSCSH
CAIN A,"H"
JRST HITPNT
CAIN A,"U"
JRST USRCSH
SKIPN FTMTRA
JRST INLUP1
CAIN A,"A"
JRST RESUMA
SKIPE FTMTRA
JRST HUH
INLUP1: CAIN A,"C"
JRST CODCSH
CAIN A,"J"
JRST JOBMTR
HUH: OUTSTR [ASCIZ /
??/]
JRST INLOOP
RESUMA: MOVEI A,0
MTRUUO A,
CAI
CAI
JRST INLOOP
RESUMB: MOVEI A,0
SKIPE FTMTRA
MOVSI A,5000
MTRUUO A,
CAI
CAI
JRST INLOOP
MTRST: MOVSI A,6000
SKIPE FTMTRA
MOVSI A,4000
MTRUUO A,
CAI
CAI
JRST INLOOP
CODCSH: PUSHJ P,DECIN ;READ CHANNEL NUMBER INTO B
HRLI B,5000
MTRUUO B,
JRST 4,.
JRST [ OUTSTR [ASCIZ /CAN'T METER THAT CHANNEL YET
/]
JRST INLOOP ]
JRST INLOOP
USRCSH: SKIPA A,[3000,,]
SYSCSH: MOVSI A,2000
ANYCSH: MTRUUO A,
JRST 4,.
JRST MTRBAD
JRST INLOOP
MTRBAD: OUTSTR [ASCIZ /BAD METER ARGUMENTS
/]
JRST 4,.
;PEEKIT LOOP0 LOOP LOOP1 PKDONE NOMLST
PEEKIT: MOVSI A,377000
SETPR2 A,
JRST 4,.
MOVE A,400325 ;GET MTRLST
JUMPE A,NOMLST ;NO METER LIST
MOVEI B,-NSPEC(A)
HRLI B,-NSPEC
LOOP0: MOVE D,400000(B)
HLRO C,B
MOVEM D,TABSPC+NSPEC(C)
AOBJN B,LOOP0
MOVSI B,-MTRMAX ;NUMBER OF ENTRIES WE CAN STAND
LOOP: MOVSI C,-MTRSIZ
HRRI C,MTRBUF(B) ;BASE OF CURRENT METER BLOCK
LOOP1: HLRO D,C ;-COUNT OF METER ENTRIES
ADDI D,MTRSIZ(A)
MOVE D,400000(D)
MOVEM D,(C)
AOBJN C,LOOP1
HRRZ A,MTRBUF+MTRLNK(B) ;LINK TO NEXT BLOCK
ADD B,[1,,MTRSIZ]
JUMPE A,PKDONE
JUMPL B,LOOP
OUTSTR [ASCIZ/Too many meter blocks in the system.
Recompile this program with a larger MTRMAX. Will continue.
/]
PKDONE: SETZM MTRBUF+MTRDAT(B) ;ZERO TO TERMINATE LIST.
DETSEG ;FLUSH SETPR2
POPJ P,
NOMLST: OUTSTR [ASCIZ/No meter list
/]
EXIT
;HITPNT JOBMTR BADJN
HITPNT: SKIPE MTRBKG ;MAKE SURE METER ISN'T IN BACKGROUND MODE
JRST [ OUTSTR [ASCIZ /
SORRY, METER IS IN BACKGROUND MODE. ENABLE CACHE HIT METERING FIRST.
/]
JRST INLOOP ]
MOVE A,[1000,,CNTRS] ;READ BACK ALL DOUBLEWORD METERS
MTRUUO A,
JRST 4,.
JRST MTRBAD
OUTCHR [11]
DMOVE W,CNTRS+2 ;GET PERFORMANCE COUNTER
ASHC W,-=12
DMUL W,[0 ↔ =10000]
DMOVE A,CNTRS+6 ;MBOX COUNTER
ASHC A,-=12
DDIV W,A ;DIVIDE BY MBOX COUNTER
DMOVE Y,[0 ↔ =10000]
DSUB Y,W ;SUBTRACT FROM 100 TO GET % CACHE HIT
SKIPE Y
JRST 4,.
MOVE W,Z
IDIVI W,=100
MOVE A,W
PUSHJ P,DECOUT
OUTCHR ["."]
IDIVI X,=10
MOVE A,X
PUSHJ P,DECOUT
MOVE A,Y
PUSHJ P,DECOUT
OUTSTR [ASCIZ /% CACHE HIT RATE
/]
SKIPN A,MTRJOB
JRST INLOOP
OUTSTR [ASCIZ /FOR JOB /]
PUSHJ P,DECOUT
OUTSTR [ASCIZ /., # OF SCHEDULES = /]
MOVE A,MTRNSC
PUSHJ P,DECOUT
OUTSTR [ASCIZ /.
/]
JRST INLOOP
JOBMTR: PUSHJ P,DECIN ;READ JOB NUMBER INTO B
JUMPE B,BADJN
CAIL B,100
JRST BADJN
HRLI B,4000 ;MAKE MTRUUO OP CODE
MTRUUO B, ;SET UP ONE USER METERING AND ZERO SCHEDULE COUNT
JRST 4,.
JRST MTRBAD
JRST INLOOP
BADJN: OUTSTR [ASCIZ /
JOB NUMBER OUT OF RANGE/]
JRST HUH
;MTRPN0 MTRPNT PLOOP0 PLOOP NLOOP PLOOP2 PLOOP1 CRLF DONALL SPCL1 MS1LUP MS1DON SPCXCT SPCXT1 SPCXT2 SPCXT0 CPOPJ1
MTRPN0: MOVEI A,MFASTI ;MAX INDEX TO TYPEOUT IS USER MODE
MOVEM A,MPIMAX
SETOM MQUICK ;SUPPRESS LOTS OF STUFF
MTRPNT: OUTSTR CRLF
MOVE A,[1502,,777200] ;THIS IS SUPPOSED TO COUNT EVERYTHING
CAME A,MTRBUF+MTRDAT ;AND IT SHOULD BE THE FIRST ENTRY
JRST BADLST
DMOVE A,MTRBUF+MTRTOT ;CUMULATIVE VALUE
ASHC A,-=12 ;12 BITS AT THE BOTTOM AREN'T COUNTED
DIV A,MTRBUF+MTRCNT ;BY NUMBER OF SAMPLES= AVERAGE CLOCK RATE
MOVEM A,MTRAVG+1 ;AVERAGE RATE = 100%
SETZM MTRAVG ;(HIGH WORD OF MTRAVG = 0)
IMULI A,=120/4 ;NUMBER OF MBOX CLOCKS/SECOND
SKIPE MQUICK
JRST PLOOP0 ;ONLY WANT PI INFO TYPED OUT
OUTSTR [ASCIZ/MBOX clock = /]
PUSHJ P,DECOUT
OUTSTR [ASCIZ\/second
Most Recent Cumu- Sample
recent av 16 lative Name
sample samples
\]
PLOOP0: MOVEI B,MTRBUF
PLOOP: ADDI B,MTRSIZ
SKIPN A,MTRDAT(B) ;ANYONE HOME?
JRST DONALL ;NO.
CAMN A,[1102,,777200] ;MONITORING MICROCODE STATE 1?
JRST PLOOP2 ;YES. DIFFERENT TABLE
MOVSI C,-NTABLN
NLOOP: CAMN A,NTAB(C)
JRST PLOOP1 ;FOUND THE NAME FOR THIS
ADD C,[2,,2]
JUMPL C,NLOOP
JRST PLOOP1
PLOOP2: HLRZ A,MTRLNK(B) ;GET THE INDEX TO THE TYPE OF METER CODE
CAIL A,MS1LEN ;WITHIN BOUNDS?
MOVEI A,0 ;NO. GIVE THE LOSE MESSAGE
MOVEI C,MS1MSG-NTAB-1(A) ;FOR OUTSTR @NTAB+1(C)
PLOOP1: MOVEI W,(C) ;SEE IF ONLY WANTS SOME PI CHANNEL(S)
LSH W,-1 ;MULTIPLY BY TWO TO GET RIGHT INDEX
CAML W,MPIMIN ;IN RANGE?
CAMLE W,MPIMAX ;BELOW MAX CHANNEL?
JRST PLOOP ;NO, SUPPRESS TYPEOUT
DMOVE W,CONST
DMUL W,MTRVAL(B) ;PRODUCT IN W,X,Y,Z
DDIV W,MTRAVG ;X←0 TO 100000 (FOR 0 TO 1.0)
ASH X,-=12
PUSHJ P,FRACT ;WRITE FRACTION FROM X.
DMOVE W,CONST
DMUL W,MTRREC(B) ;recent 16 sample W,X,Y,Z
DDIV W,MTRAVG
ASHC W,-=16 ;12 FOR 12 LOW BITS +4 FOR DIVIDE BY 16
PUSHJ P,FRACT ;WRITE FRACTION FROM X.
DMOVE W,CONST
DMUL W,MTRTOT(B) ;CUMULATIVE PRODUCT IN W,X,Y,Z
DDIV W,MTRAVG
DIV W,MTRCNT(B) ;X←0 TO 100000 (FOR 0 TO 1.0)
LSH W,-=12
MOVE X,W
PUSHJ P,FRACT
OUTSTR [ASCIZ / /]
OUTSTR @NTAB+1(C)
OUTSTR CRLF
JRST PLOOP
CRLF: BYTE(7)15,12
DONALL: SKIPE MQUICK ;SUPPRESSING EXTRA STUFF?
JRST INLOOP ;YUP, ALL DONE
OUTSTR CRLF
MOVSI D,-SPCLN
SPCL1: MOVEI A,(D)
LSH A,1
DMOVE A,SPCTAB(A)
XCT SPCXCT(D)
OUTSTR @SPCNAM(D)
OUTSTR CRLF
AOBJN D,SPCL1
OUTSTR [ASCIZ /
MICROCODE STATE 1 METERPOINT COUNTERS
Most Last Cumu- Sample
recent 16 lative Name
count counts
/]
MOVEI C,MTRBUF
MS1LUP: ADDI C,MTRSIZ
SKIPN A,MTRDAT(C) ;ANYONE HOME?
JRST MS1DON ;NO.
CAME A,[1102,,777200] ;MONITORING MICROCODE STATE 1?
JRST MS1LUP ;NO. SKIP IT
MOVE A,MTRNUL(C) ;LAST COUNT
PUSHJ P,DECOUT
OUTCHR [11]
MOVE A,MTRNUR(C) ;LAST 16 COUNTS
PUSHJ P,DECOUT
OUTCHR [11]
MOVE A,MTRNUT(C) ;CUMULATIVE COUNTS
PUSHJ P,DECOUT
OUTCHR [11]
HLRZ A,MTRLNK(C)
CAIL A,MS1LEN ;WITHIN BOUNDS?
MOVEI A,0 ;NO. GIVE THE LOSE MESSAGE
OUTSTR @MS1MSG(A)
OUTSTR CRLF
DMOVE W,MTRVAL(C) ;GET TIME FROM LAST 4 TIC PERIOD
ASHC W,-=12 ;FLUSH IRRELEVANT BITS
DMUL W,[0 ↔ 8] ;CONVERT TO MICROSECONDS
DDIV W,[0 ↔ =100]
DIV W,MTRNUL(C) ;DIVIDE BY NUMBER OF COUNTS
MOVE A,W
PUSHJ P,DECOUT ;USEC/EVENT
OUTCHR [11]
DMOVE W,MTRREC(C) ;GET TIME FROM LAST 16 4 TIC PERIODS
ASHC W,-=12 ;FLUSH IRRELEVANT BITS
DMUL W,[0 ↔ 8] ;CONVERT TO MICROSECONDS
DDIV W,[0 ↔ =100]
DIV W,MTRNUR(C) ;DIVIDE BY NUMBER OF COUNTS
MOVE A,W
PUSHJ P,DECOUT ;USEC/EVENT
OUTCHR [11]
DMOVE W,MTRTOT(C) ;GET CUMULATIVE TIME
ASHC W,-=12 ;FLUSH IRRELEVANT BITS
DMUL W,[0 ↔ 8] ;CONVERT TO MICROSECONDS
DDIV W,[0 ↔ =100]
DIV W,MTRNUT(C) ;DIVIDE BY NUMBER OF COUNTS
MOVE A,W
PUSHJ P,DECOUT ;USEC/EVENT
OUTCHR [11]
OUTSTR [ASCIZ \USEC/COUNT \]
MOVE W,MTRNUT(C) ;TOTAL NUMBER OF TIMES
MOVE X,MTRCNT(C) ;TOTAL NUMBER OF 4 TIC PERIODS
IMULI X,4*=50
IDIVI X,3 ;TOTAL TIME IN MS
MOVE Y,X ;SAVE IT
IMULI W,=1000
IDIV W,X ;COUNTS PER SECOND
MOVE A,W
PUSHJ P,DECOUT
OUTSTR [ASCIZ \ COUNTS/SEC IN \]
MOVE A,Y
PUSHJ P,DECOUT
OUTSTR [ASCIZ \ MS
\]
JRST MS1LUP
MS1DON: OUTSTR [ASCIZ/
/]
JRST INLOOP
SPCXCT: PUSHJ P,SPCXT0
PUSHJ P,SPCXT1 ;PRINT CPU SECONDS
PUSHJ P,SPCXT1
PUSHJ P,SPCXT2
SPCXT1: DIV A,[10000*=1000000] ;CONVERT TO SECONDS
PUSHJ P,DECOUT
OUTSTR [ASCIZ/ CPU seconds /]
POPJ P,
SPCXT2: DIV A,[10000] ;CONVERT TO MICROSECONDS
PUSHJ P,DECOUT
OUTSTR [ASCIZ/ microseconds /]
POPJ P,
SPCXT0: PUSH P,B
IDIVI A,10000
PUSHJ P,DECOUT
OUTSTR @SPCNAM(D)
POP P,A ;ADDRESS
PUSHJ P,OCTOUT
CPOPJ1: AOS (P)
POPJ P,
;DECIN DECIN1 OCTOUT OCTOU1 DECOUT FRACT STAR NTAB NTABLN MS1MSG MS1LEN BADLST
DECIN: MOVEI B,0
DECIN1: INCHWL A
CAIN A,15
JRST DECIN1
CAIE A,175
CAIN A,12
POPJ P,
CAIL A,"0"
CAILE A,"9"
JRST HUH
IMULI B,=10
ADDI B,-"0"(A)
JRST DECIN1
OCTOUT: MOVEI C,=12
MOVE B,A
OCTOU1: MOVEI A,0
LSHC A,3
ADDI A,"0"
OUTCHR A
SOJG C,OCTOU1
POPJ P,
DECOUT: IDIVI A,=10
HRLM B,(P)
SKIPE A
PUSHJ P,DECOUT
HLRZ A,(P)
ADDI A,"0"
OUTCHR A
POPJ P,
FRACT: JUMPL X,STAR
CAILE X,=105000 ;POSSIBLE 5% CONFUSION?
JRST STAR
PUSH P,B
IDIVI X,=100000
MOVE A,X
PUSHJ P,DECOUT
OUTCHR ["."]
MOVE A,Y
CAIGE A,=10000
OUTCHR ["0"]
CAIGE A,=1000
OUTCHR ["0"]
CAIGE A,=100
OUTCHR ["0"]
CAIGE A,=10
OUTCHR ["0"]
PUSHJ P,DECOUT
OUTSTR [ASCIZ/ /]
POP P,B
POPJ P,
STAR: OUTSTR [ASCIZ/******* /]
POPJ P,
;PI channels must the be first 8 here to make the single channel typeout cmds work.
NTAB: 1502,,400200 ↔ [ASCIZ/PI 0/]
1502,,200200 ↔ [ASCIZ/PI 1/]
1502,,100200 ↔ [ASCIZ/PI 2/]
1502,,040200 ↔ [ASCIZ/PI 3/]
1502,,020200 ↔ [ASCIZ/PI 4/]
1502,,010200 ↔ [ASCIZ/PI 5/]
1502,,004200 ↔ [ASCIZ/PI 6/]
1502,,002000 ↔ [ASCIZ/PI 7/]
1502,,001000 ↔ [ASCIZ/UUO level/]
1502,,001400 ↔ [ASCIZ/User mode/]
MFASTI←←<.-NTAB-2>/2 ;ABOVE IS LAST DATA FOR F CMD TYPEOUT
1534,,777200 ↔ [ASCIZ/EBOX time waiting for memory/]
1554,,777200 ↔ [ASCIZ/EBOX time waiting for cache miss/]
1564,,777200 ↔ [ASCIZ/EBOX waiting for EBOX induced writeback/]
1570,,777200 ↔ [ASCIZ/EBOX waiting for sweep writeback/]
NTABLN←←.-NTAB
0 ↔ [ASCIZ/Unknown meter point/]
MS1MSG: [ASCIZ /Unknown Microcode state 1/]
[ASCIZ /Waiting for sweep to finish/]
[ASCIZ /Shuffle and shuffle setup/]
[ASCIZ /Wasted time/]
[ASCIZ /CSHSET routine/]
[ASCIZ /APRMAP routine/]
[ASCIZ /NXTJOB routine/]
[ASCIZ /PWAIT routine/]
[ASCIZ /XWAIT routine/]
[ASCIZ /WSCHED routine/]
[ASCIZ /spare SPRON-SPROFF/]
MS1LEN←←.-MS1MSG
BADLST: OUTSTR [ASCIZ/Bad Meter list
/]
EXIT
END GO